package top.zxybird.yun.serialization.thrift.model;

import java.util.List;
import java.util.stream.Collectors;

import com.google.common.collect.Lists;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;

@EqualsAndHashCode()
public class TMessage {

  /**
   * 版本
   */
  @Getter
  @Setter
  private Integer version;

  /**
   * 类型
   */
  @Getter
  @Setter
  private Byte type;

  /**
   * 名称
   */
  @Getter
  @Setter
  private String name;

  /**
   * 序列号
   */
  @Getter
  @Setter
  private Integer seqid;

  /**
   * 参数
   */
  @Getter
  @Setter
  private List<Object> args;

  public TMessage() {
    this.args = Lists.newArrayList();
  }

  public void addField(TType field) {
    args.add(field);
  }

  public List<TType> getAllField() {
    return args.stream().map(x -> (TType) x).collect(Collectors.toList());
  }

  public enum Type {

    /**
     * 发送请求
     */
    CALL((byte) 1),
    /**
     * 回应请求
     */
    REPLY((byte) 2),
    /**
     * 异常
     */
    EXCEPTION((byte) 3),
    /**
     * 不需要返回值的请求
     */
    ONEWAY((byte) 4);

    byte type;

    Type(byte type) {
      this.type = type;
    }

    public byte getType() {
      return type;
    }
  }

}
